﻿using System;

namespace SobrietyEngine.Components
{
    public interface IOrientation
    {
        void ByAxisAngle(Microsoft.Xna.Framework.Vector3 axis, float angle);
        Microsoft.Xna.Framework.Vector3 Forward { get; }
        Microsoft.Xna.Framework.Quaternion Orientation { get; }
        float GetRadiansXY();
        bool InitComponent();
        bool LockUp { get; set; }
        Microsoft.Xna.Framework.Matrix RotationMatrix { get; }
        Microsoft.Xna.Framework.Vector3 RotationOrigin { get; }
        Microsoft.Xna.Framework.Vector3 ForwardPerpToGlobalUp { get; }
        void RelativeAxisPitch(float amt);
        void RelativeAxisRoll(float amt);
        void RelativeAxisYaw(float amt);
        void RelativeAxisYawPitchRoll(float yaw, float pitch, float roll);
        void Reset();
        Microsoft.Xna.Framework.Vector3 Right { get; }
        void Set(Microsoft.Xna.Framework.Vector2 dir);
        void Set(Microsoft.Xna.Framework.Vector3 dir);
        void Set(Microsoft.Xna.Framework.Vector3 forward, Microsoft.Xna.Framework.Vector3 up);
        void Set(float yaw);
        void Set(float yaw, float pitch, float roll);
        void SetLookAt(Microsoft.Xna.Framework.Vector3 lookAtPoint);
        void SetWorldAxis(Microsoft.Xna.Framework.Vector3 forward, Microsoft.Xna.Framework.Vector3 up, Microsoft.Xna.Framework.Vector3 right);
        Type[] SupportedInterfaces();
        void ToAxisAngle(Microsoft.Xna.Framework.Vector3 axis, float angle);
        Microsoft.Xna.Framework.Vector3 Up { get; }
        void WorldAxisPitch(float amt);
        void WorldAxisRoll(float amt);
        void WorldAxisYaw(float amt);
        void WorldAxisYawPitchRoll(float yaw, float pitch, float roll);
        Microsoft.Xna.Framework.Vector3 GlobalForward { get; }
        Microsoft.Xna.Framework.Vector3 GlobalRight { get; }
        Microsoft.Xna.Framework.Vector3 GlobalUp { get; }
    }
}
